package com.ruoyi.system.controlle;

import com.ruoyi.system.domain.MenuLevel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MenuLevelTreeBuilder {

    public List<MenuLevel> buildTree(List<MenuLevel> categories) {
        // 创建一个映射，方便通过ID快速查找Category对象
        Map<Integer, MenuLevel> categoryMap = new HashMap<>();
        for (MenuLevel category : categories) {
            categoryMap.put(category.getId(), category);
        }

        List<MenuLevel> tree = new ArrayList<>();

        // 遍历所有分类，构建树形结构
        for (MenuLevel category : categories) {
            if (category.getPid() == 0) {
                // 如果pid为0，则是根节点
                tree.add(category);
            } else {
                // 否则，找到其父节点并添加为子节点
                MenuLevel parent = categoryMap.get(category.getPid());
                if (parent != null) {
                    parent.addChild(category);
                }
            }
        }

        return tree;
    }

    // 打印树形结构（递归方法）
    public void printTree(MenuLevel node, int level) {
        // 打印当前节点的名称，并根据层级添加缩进
        for (int i = 0; i < level; i++) {
            System.out.print("--");
        }
        System.out.println(node.getName());

        // 递归打印子节点
        for (MenuLevel child : node.getChildren()) {
            printTree(child, level + 1);
        }
    }
}

